
////运行超时 
//#include<bits/stdc++.h>
//using namespace std;
//
//const int N = 1e4+100;
//int n, a[N];
//
//int main()
//{
//	
//	cin >> n;
//	int sum = 0;
//	for(int i=1; i<=n; i++)
//	{
//		cin >> a[i];
//	}
//	
//	for(int i=1; i<=n-1; i++)
//	{
//		sort(a+1, a+1+n);
//		a[i+1] += a[i];
//		a[i] = 0;
//		sum += a[i+1]; 
//	}
//	cout << sum << endl;
//	
//	return 0;
//}




////使用小根堆
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+50;
int n, a[N], sum = 0;
priority_queue<int, vector<int>, greater<int> > pq;

int main()
{
	cin >> n;
	for(int i=1; i<=n; i++)
	{
		cin >> a[i];
		pq.push(a[i]);
	}
	while(pq.size() > 1)
	{
		int x = pq.top();
		pq.pop();
		int y = pq.top();
		pq.pop();
		sum += x+y;
		pq.push(x+y);
	}
	cout << sum << endl;
	return 0;
 } 